<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>


        /*  // 语法: Object.defineProperty(哪一个对象, key, { 配置项 }) */
        /* 
      配置项:
        + value: 该 key 的值
        + writable: 表示是否可写, 默认是 false, 选填是 true
        + enumerable: 表示是否可枚举, 默认是 false, 选填是 true
        + get: 是一个函数, 表示 getter 获取器, get 的返回值就是该 key 对应的 value
          => 注意: get 不能和 value 和 writable 一起使用
        + set: 是一个函数, 表示 setter 设置器, 当你试图修改这个数据的时候, 会触发 set 函数
        */

        // let obj = {

        // }
        
        // obj.name = 'zhangsan';
        // obj.name = '李四';
        // 我们可以准备一个数据 
        // 我们也可以修改一个数据 
        // 唯独我们不能 捕获改变数据的行为  
        // 怎么解决?
        // 让数据知道自己被修改了

        // 数据劫持 
        // let obj = {

        // }
        // // obj.name = 'jack';
        // // 只要操作obj 立马被监控 和管理  进而捕获修改数据的行为 
        // // 以数据劫持的方式 向 obj 添加内容 
        // // 内容直到自己被改变了
        // Object.defineProperty(obj,'name',{
        //     // value:'jack',
        //     // writable:true, //false  不管对obj.name怎么赋值 都不会变 
        //     // enumerable:false // false 不能遍历拿到数据
        //     get(){
        //         return 'kangbazi'; // 如果你写obj.name get 方法自动调用
        //     },
        //     set(val){
        //         console.log('你想修改成啥玩意呢');
        //     }
        // }) 

        // console.log(obj);
        // obj.name = 'peter';
        // console.log(obj);
    //    for(var k in obj){
    //         console.log(obj[k]);
    //    }
        // console.log(obj.name);// 只要你写对象.上面的key get()方法自动调用 
        obj.name = 888;
 
    </script>
</body>
</html>